package com.example.kick.designpattern;

import java.io.*;
import java.nio.charset.Charset;

/**
 * 设计模式学习
 *
 * @date 2022-03-01
 */
public class PatternTest {

    /**
     * 装饰器
     * 要点：1.装饰器不改变被装饰对象的接口，而是恰恰要保持原有的接口，但是增强原有对象的功能
     *      2.装饰器持有被装饰接口对象的实例
     * 例：FilterInputStream中持有InputStream的实例,InputStream就是被装饰的对象,FilterInputStream就是装饰器,
     *    BufferedInputStream是FilterInputStream具体的实现类
     */
    public static void testDecorator() {
        try {
            FileInputStream fis = new FileInputStream("");
//            InputStream filterIS = FilterInputStream.nullInputStream();
//            BufferedInputStream bbis = new BufferedInputStream(filterIS);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 适配器
     * 要点：适配器的目的是要将一个接口转变成另一个接口
     * 例如：InputStream要想实现Reader的功能，必须得经过InputStreamReader来包装才行
     */
    public static void testAdapter() {
        try {
            InputStreamReader isr = new InputStreamReader(new FileInputStream("d:\\a.txt"));
            BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\a.txt"), Charset.forName("gbk")));
            System.out.println(br1.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        testDecorator();
    }

}
